import unittest
from maths import *


class TestMath(unittest.TestCase):
    @classmethod  # 类方法装饰器
    def setUpClass(cls) -> None:
        print("环境准备")

    @classmethod
    def tearDownClass(cls) -> None:
        print("环境销毁")

    def setUp(self):
        print("环境的搭建")

    def tearDown(self):
        print("环境的销毁")

    # 这是第一条测试用例，测试add()
    unittest.skip("dd")
    def test_add(self):
        """测试add（），加法"""

        result = add(1, 2)  # 执行结果
        exceptResult = 3  # 期望结果
        # 判断执行结果是否与期望结果一致
        # TestCase类中提供了断言方法
        self.assertEqual(result, exceptResult)

    # 这是第二条测试用例,测试add(),字符串连接的情况

    def test_add2(self):
        self.skipTest("跳过字符串连接情况测试用例")
        """测试加号连接"""
        result = add('hello', '!!')
        exceptResult = "hello!!"
        self.assertEqual(result, exceptResult)

    # 这是第三条测试用例，测试minus
    def test_minus(self):
        result = minus(10, 5)
        exceptResult = 5
        self.assertEqual(result, exceptResult)

    # 这是第四条测试用例，测试multi()
    def test_multi(self):
        self.assertEqual(multi(3, 3), 9)

    # 这是第五条测试用例，测试minus
    def test_divide(self):
        self.assertEqual(divide(10, 3), 3.3333)

    def test_divide2(self):
        try:
            self.assertEqual(divide(1, 0), 1)
        except ZeroDivisionError as e:
            raise e


if __name__ == '__main__':
    '''使用TestSuite来控制测试用例执行顺序'''
    suite = unittest.TestSuite()
    # 方法1：addTest()添加一个测试用例
    # suite.addTest(TestMath("test_add"))
    # suite.addTest(TestMath("test_add2"))
    # suite.addTest(TestMath("test_minus"))
    # suite.addTest(TestMath("test_multi"))
    # suite.addTest(TestMath("test_divide"))
    # suite.addTest(TestMath("test_divide2"))

    # 方法2：addTests（）添加一个列表（测试用例）
    # tests = [TestMath("test_add"),
    #          TestMath("test_add2"),
    #          TestMath("test_minus"),
    #          TestMath("test_multi"),
    #          TestMath("test_divide"),
    #          TestMath("test_divide2")
    #          ]
    # suite.addTests(tests)

    # 方法3：组织多个测试文件中的测试用例

    # 执行测试用例
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)
